// todo 导航守卫
/*
  逻辑 分析好 拦截思路

  伪代码

  if(登录了){
    if(去的页面是登录页面){
      直接去后台首页（已经登录过了，不用重复登录）
      next('/')
    }else{
      非登录，直接放行
      next()
    }
  }else{
    未登录

    if(去的页面是白名单){
        白名单（不需要登录就可以访问的页面 比如：登录页面，404页面），直接放行
        next()
    }else{
        非白名单（必须登录了才能看）拦截去登登录页面
        next('/login')
    }
  }
*/
import router from '@/router'
import store from '@/store'
const whiteList = ['/login', '/404']
// 导航前置守卫
router.beforeEach(async (to, from, next) => {
  // 处理逻辑
  const token = store.state.user.token
  if (token) {
    if (to.path === '/login') {
      // 直接去后台首页（已经登录过了，不用重复登录）
      next('/')
    } else {
      // 有用户资料吗？
      if (!store.state.user.userInfo.id) {
        // 没有就获取一下
        const menuList = await store.dispatch('user/Actions_SetUserInfo')
        // console.log(menuList)
        // menuList就是该用户的动态路由配置
        // 整理服务器端会的路由配置
        const userAsyncRoute = await store.dispatch(
          'permission/generateRoute',
          menuList
        )
        console.log(userAsyncRoute)
        // 添加到路由实例里面去
        router.addRoutes(userAsyncRoute)
        // 路由重新走一次
        next(to.path)
      }
      // 非登录页面，直接放行
      next()
    }
  } else {
    // 未登录
    if (whiteList.includes(to.path)) {
      // 白名单（不需要登录就可以访问的页面 比如：登录页面，404页面），直接放行
      next()
    } else {
      // 非白名单（必须登录了才能看）拦截去登登录页面
      next('/login')
    }
  }
})
